/**
 * webpack 插件是一个具有 apply 方法的 JavaScript 对象。
 * 在 Compiler 实例创建后，Webpack 会遍历安装的插件列表，并针对每个插件调用其 apply 方法。
    const createCompiler = rawOptions => {
        //...
        const compiler = new Compiler(options);
        // ...
        if (Array.isArray(options.plugins)) {
            for (const plugin of options.plugins) {
                if (typeof plugin === "function") {
                    plugin.call(compiler, compiler);
                } else if (plugin) {
                    plugin.apply(compiler);
                }
            }
        }
        // ...
        return compiler;
    };
 */
class TestPlugin {
    constructor(options) {
        this.userOptions = options;
        this.pgName = 'TestPlugin';
        this.pgVersion = '1.0.0';
    }

    apply(compiler) {
        compiler.hooks.compilation.tap(this.pgName, compilation => {
            console.log("this.userOptions", this.userOptions);
            // console.log("compiler.hooks:", compiler.hooks);
            console.log("TestPlugin 开始启用!");
            // console.log("compilation", compilation, compilation === compiler);
            console.log("TestPlugin 启用完毕!");
        });
    }
}

module.exports = { TestPlugin };